﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using kinokasse.bauteile.contracts.PreisgruppenRepository;
using kinokasse.datamodel.contracts;

namespace kinokasse.preisgruppenrepo
{
    public class PreisgruppenLaden : IPreisgruppenLaden
    {
        private const String PathPreisgruppenDatei = "Preisgruppen.txt";

        public void In_Laden()
        {
            Trace.TraceInformation("methode PreisgruppenLaden.In_Laden aufgerufen");
            var preisgruppenZeilen = GetInhaltPreisgruppenDatei();
            var preisgruppen = preisgruppenZeilen.Select(ParsePreisgruppe).ToList();

            Out_Preisgruppen(preisgruppen);
            Trace.TraceInformation("methode PreisgruppenLaden.In_Laden beendet");
        }

        internal Preisgruppe ParsePreisgruppe(String preisgruppenZeile)
        {
            var gruppendaten = preisgruppenZeile.Split(';');
            var bezeichnung = gruppendaten[0];

            var preisString = gruppendaten[1];
            var preis = double.Parse(preisString);

            return new Preisgruppe(bezeichnung, preis);
        }

        internal IEnumerable<string> GetInhaltPreisgruppenDatei ()
        {
            var streamReader = File.OpenText(PathPreisgruppenDatei);
            var preisgruppenZeilen = new List<String>();
            string preisgruppenZeile;
            while ((preisgruppenZeile = streamReader.ReadLine()) != null)
            {
                preisgruppenZeilen.Add(preisgruppenZeile);
            }
            streamReader.Close();
            return preisgruppenZeilen;
        }

        public event Action<IEnumerable<Preisgruppe>> Out_Preisgruppen;

    }
}